tests/animated-resizing: Don't try to resize during frame dispatch
authorJonas Ådahl <jadahl@gmail.com>
Fri, 4 Dec 2020 14:02:59 +0000 (15:02 +0100)
committerJonas Ådahl <jadahl@gmail.com>
Mon, 7 Dec 2020 19:37:29 +0000 (20:37 +0100)
This will not work on X11 because it's too late to resize, due to
resizing being asynchronous i.e. it won't be complete before we need to
draw.

tests/animated-resizing.c

index 0446b29b68f62686d5ff332c1972e74b1263f8cc..c9a316a5608095c638f6acff835c521514179b70 100644 (file)
@@ -130,10 +130,9 @@ on_frame (double progress)
 }
 
 static gboolean
-tick_callback (GtkWidget     *widget,
-               GdkFrameClock *frame_clock,
-               gpointer       user_data)
+resize_idle (gpointer user_data)
 {
+  GdkFrameClock *frame_clock = user_data;
   gint64 frame_time = gdk_frame_clock_get_frame_time (frame_clock);
   double scaled_time;
 
@@ -143,6 +142,16 @@ tick_callback (GtkWidget     *widget,
   scaled_time = (frame_time - start_frame_time) / (CYCLE_TIME * 1000000);
   on_frame (scaled_time - floor (scaled_time));
 
+  return G_SOURCE_REMOVE;
+}
+
+static gboolean
+tick_callback (GtkWidget     *widget,
+               GdkFrameClock *frame_clock,
+               gpointer       user_data)
+{
+  g_idle_add (resize_idle, frame_clock);
+
   return G_SOURCE_CONTINUE;
 }
 
@@ -196,7 +205,6 @@ main(int argc, char **argv)
            cb_no_resize ? "no" : "yes");
 
   window = gtk_window_new ();
-  gtk_window_set_resizable (GTK_WINDOW (window), FALSE);
   frame_stats_ensure (GTK_WINDOW (window));
 
   da = gtk_drawing_area_new ();